package com.linzi.common.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;

import java.util.List;

/**
 * @author chenmaolin
 * @version 1.0
 * @date 2021/9/28
 * @Description json
 */
@Slf4j
public class JsonUtils {

    /**
     * JSON 转 POJO
     */
    public static <T> T getObject(String pojo, Class<T> tclass) {
        try {
            return JSONObject.parseObject(pojo, tclass);
        } catch (Exception e) {
            log.error(tclass + "转 JSON 失败");
        }
        return null;
    }

    /**
     * JSONObject 转 POJO
     */
    public static <T> T getObject(JSONObject jsonObject, Class<T> tclass) {
        try {
            String pojo = JSON.toJSONString(jsonObject);
            return getObject(pojo, tclass);
        } catch (Exception e) {
            log.error(tclass + "转 JSON 失败");
        }
        return null;
    }

    /**
     * POJO 转 JSON
     */
    public static <T> String getJson(T tResponse) {
        return JSONObject.toJSONString(tResponse);
    }

    /**
     * List<T> 转 json 保存到数据库
     */
    public static <T> String listToJson(List<T> ts) {
        return JSON.toJSONString(ts);
    }

    /**
     * json 转 List<T>
     */
    public static <T> List<T> jsonToList(String jsonString, Class<T> clazz) {
        @SuppressWarnings("unchecked")
        List<T> ts = (List<T>) JSONArray.parseArray(jsonString, clazz);
        return ts;
    }

    /**
     * jsonArray 转 List<T>
     */
    public static <T> List<T> jsonToList(JSONArray jsonArray, Class<T> clazz) {
        @SuppressWarnings("unchecked")
        String jsonString = JSON.toJSONString(jsonArray);
        List<T> ts = (List<T>) JSONArray.parseArray(jsonString, clazz);
        return ts;
    }
}
